package com.bkhc.common.config;

import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.interceptor.TransactionInterceptor;

import javax.sql.DataSource;
import java.util.Properties;

@Configuration
public class TxConfigBeanName {

    @Autowired
    private PlatformTransactionManager transactionManager;

    // 创建事务通知

    @Bean(name ="txAdvice")
    public TransactionInterceptor getAdvisor()throws Exception {

        Properties properties =new Properties();
        properties.setProperty("get*","PROPAGATION_REQUIRED");
        properties.setProperty("add*","PROPAGATION_REQUIRED");
        properties.setProperty("save*","PROPAGATION_REQUIRED");
        properties.setProperty("update*","PROPAGATION_REQUIRED");
        properties.setProperty("delete*","PROPAGATION_REQUIRED");

        TransactionInterceptor tsi =new TransactionInterceptor(transactionManager,properties);
        return tsi;

    }

    @Bean
    public BeanNameAutoProxyCreator txProxy() {
        BeanNameAutoProxyCreator creator =new BeanNameAutoProxyCreator();
        creator.setInterceptorNames("txAdvice");
        creator.setBeanNames("*Service");
        creator.setProxyTargetClass(true);
        return creator;
    }
}